OpenTelemetry WebServer module
Nginx Webserver Module also enables tracing of incoming requests to the server by injecting instrumentation into the Nginx server at runtime. It also captures the response time of the individual modules involved in the request processing.
Apache と同様に、Nginx ウェブサーバモジュールでも、ランタイムに Nginx サーバにインスツルメンテーションを注入することにより、サーバへの着信リクエストのトレースが可能です。また、リクエスト処理に関わる個々のモジュールのレスポンスタイムを取得することもできます。 (DeepL.comで翻訳) nginxモジュール(.so)は自分でビルドする必要がある。
上記ページにビルド方法も書かれているが、Dockerfileを用意すれば簡単にビルドできる。
code:Dockerfile.original (Dockerfile)
FROM nginx:1.18
RUN apt-get update ; apt-get install unzip
RUN cd /opt ; unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip; tar xvfz opentelemetry-webserver-sdk-x64-linux.tgz
RUN cd /opt/opentelemetry-webserver-sdk; ./install.sh
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
COPY opentelemetry_module.conf /etc/nginx/conf.d
sdkのリリースバージョンとNginxのバージョンが関連しているので、以下のDockerfileで複数のNginxバージョンに対応させてみた。 code:Dockefile.multi (Dockerfile)
# supports: Nginx 1.18, 1.22.0, 1.23.1
ARG VARIANT=1.18
FROM nginx:1.18 AS nginx-1.18
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
FROM nginx:1.22.0 AS nginx-1.22.0
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/1.22.0/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
FROM nginx:1.23.1 AS nginx-1.23.1
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/1.23.1/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
FROM nginx-${VARIANT}
RUN apt-get update ; apt-get install unzip
RUN cd /opt ; \
unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip; \
tar xvfz opentelemetry-webserver-sdk-x64-linux.tgz
RUN cd /opt/opentelemetry-webserver-sdk; \
./install.sh
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
COPY opentelemetry_module.conf /etc/nginx/conf.d
ビルド
code:bash
$ docker build -t nginx-otel --build-arg VARIANT=1.22.0
https://scrapbox.io/files/63696ddd289685001da5ad7c.png